﻿#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>

//文本文件
void test1()
{
    int c; // 注意：int，非char，要求处理EOF
    FILE* fp = fopen("test_4_25_1.txt", "r");
    if (!fp)
    {
        perror("File opening failed");
        return EXIT_FAILURE;//这个标识符值为1，还有一个标识符EXIT_SUCCESS，值为0
    }
    //fgetc 当读取失败的时候或者遇到文件结束的时候，都会返回EOF
    while ((c = fgetc(fp)) != EOF) // 标准C I/O读取文件循环
    {
        putchar(c);
    }
    putchar('\n');
    //判断是什么原因结束的
    if (ferror(fp))
        puts("I/O error when reading");
    else if (feof(fp))
        puts("End of file reached successfully");
    fclose(fp);
    fp = NULL;
}

//二进制文件
void test2()
{
    enum { SIZE = 5 };
    double a[SIZE] = { 1.,2.,3.,4.,5. };
    FILE* fp = fopen("test_4_25_1.bin", "wb"); // 必须用二进制模式
    fwrite(a, sizeof * a, SIZE, fp); // 写 double 的数组
    fclose(fp);
    double b[SIZE];
    fp = fopen("test_4_25_1.bin", "rb");
    size_t ret_code = fread(b, sizeof * b, SIZE, fp); // 读 double 的数组
    if (ret_code == SIZE) //判断是否读取够SIZE个数据
    {
        puts("Array read successfully, contents: ");
        for (int n = 0; n < SIZE; ++n) printf("%f ", b[n]);
        putchar('\n');
    }
    else 
    { // error handling
        if (feof(fp))
            printf("Error reading file: unexpected end of file\n");
        else if (ferror(fp))
        {
            perror("Error reading file");
        }
    }
    fclose(fp);
    fp = NULL;
}

int main()
{
    //test1();
    test2();
    return 0;
}